﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Negocio;
using Business.Entities;
using System.Text.RegularExpressions;


namespace UI.Desktop
{
    public partial class UsuarioDesktop : ApplicationForm
    {
        public UsuarioDesktop()
        {
            InitializeComponent();
            
        }

        public Usuario user;
        public Usuario UsuarioActual
        {

            get { return user; }
            set { user = value; }

        }

        public override void MapearDeDatos() 
        {
            
            this.txtID.Text = this.UsuarioActual.ID.ToString();
            this.chkHabilitado.Checked = this.UsuarioActual.Habilitado;
            this.txtNombre.Text = this.UsuarioActual.Nombre;
            this.txtApellido.Text = this.UsuarioActual.Apellido;
            this.txtEmail.Text = this.UsuarioActual.Email;
            this.txtUsuario.Text = this.UsuarioActual.Nombreusuario;
            this.txtClave.Text = this.UsuarioActual.Clave;


            if (ModoForm == modoForm.Alta || ModoForm == modoForm.Modificacion)
                {
                                   
                this.btnAceptar.Text = "Guardar";
                }
                else
                {
                    if(ModoForm==modoForm.Baja)
                    {
                        this.chkHabilitado.Enabled = false;
                        this.txtApellido.Enabled = false;
                        this.txtNombre.Enabled = false;
                        this.txtEmail.Enabled = false;
                        this.txtUsuario.Enabled = false;
                        this.btnAceptar.Text = "Eliminar";
                        
                     }
                    else
                    {
                        if(ModoForm==modoForm.Consulta) 
                        {
                            this.btnAceptar.Text = "Aceptar";
                        }
                    
                    }
                   
                }
        
        }



        public override void MapearADatos() 
       {
           if (ModoForm==modoForm.Alta)
           {
               Usuario usr = new Usuario();
               UsuarioActual = usr;
               this.UsuarioActual.State = BussinessEntity.States.New;
              

           }
           if (ModoForm==modoForm.Modificacion)
           {
               this.UsuarioActual.ID = Convert.ToInt32(this.txtID.Text);
               this.UsuarioActual.State = BussinessEntity.States.Modified;
           }
           this.UsuarioActual.Habilitado=this.chkHabilitado.Checked;
           this.UsuarioActual.Nombre = this.txtNombre.Text;
           this.UsuarioActual.Apellido = this.txtApellido.Text;
           this.UsuarioActual.Email = this.txtEmail.Text;
           this.UsuarioActual.Nombreusuario = this.txtUsuario.Text;
           this.UsuarioActual.Clave = this.txtClave.Text;
           
          
        
        
        
        }
        public override void GuardarCambios() 
        {
            this.MapearADatos();
            UsuarioLogic ul = new UsuarioLogic();
             if (ModoForm == modoForm.Baja)
            {
                UsuarioActual.State = BussinessEntity.States.Deleted;
                ul.delete(UsuarioActual.ID);
                
            
            }
             ul.save(UsuarioActual);

        }




        public override bool Validar() 
        { 

           if (this.txtNombre.Text=="" || this.txtApellido.Text=="" || this.txtEmail.Text=="" || this.txtUsuario.Text=="" ||
                this.txtClave.Text=="" || this.txtConfirmarClave.Text=="")
            {

                this.Notificar("Error", "Rellenar los campos requeridos",MessageBoxButtons.OK,MessageBoxIcon.Error);
                return false; 
            
            }
            else if (this.txtClave.Text != this.txtConfirmarClave.Text || this.txtClave.Text.Length<8)
                {
                    this.Notificar("Error", "Las contraseñas no coinciden o son menores a 8 caracteres",MessageBoxButtons.OK,MessageBoxIcon.Error);
                    return false; 
                }
            else if (!this.emailvalidar(this.txtEmail.Text))
            {
                this.Notificar("Error", "Email Invalido",MessageBoxButtons.OK,MessageBoxIcon.Error);
                return false;
            }
            else
            {
                return true;
            
            }
       
        }

       

        public UsuarioDesktop(modoForm modo)
        {
            InitializeComponent();
           ModoForm=modo;
           
                       
        }

        public UsuarioDesktop(int ID, modoForm modo) 
        {
            InitializeComponent();
            ModoForm = modo;
            UsuarioLogic usr = new UsuarioLogic();
            UsuarioActual = usr.getOne(ID);
            this.MapearDeDatos();

        }

        
        private Boolean emailvalidar(String email)
        {
            String expresion;
            expresion = "\\w+([-+.']\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*";
            if (Regex.IsMatch(email, expresion))
            {
                if (Regex.Replace(email, expresion, String.Empty).Length == 0)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            else
            {
                return false;
            }
        }

        private void btnAceptar_Click(object sender, EventArgs e)
        {
            if (this.Validar())
            {
                this.GuardarCambios();
                Close();
            }

        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            Close();
        }

        





    }
}
